/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAODetallePedidoOp;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.DetallePedidoOp;

/**
 *
 * @author usuario
 */
@Repository("daoDetallePedidoOp")
public class DAODetallePedidoOpImpl extends DaoImpl<DetallePedidoOp, Integer> implements IDAODetallePedidoOp, Serializable {

    @Override
    public DetallePedidoOp obtenerDetalleOpPorArticulo(DetallePedidoOp detalle) throws DAOException {
        DetallePedidoOp detalleBus = new DetallePedidoOp();
        try {
            sessionFactory.getCurrentSession().flush();
            detalleBus = (DetallePedidoOp) sessionFactory.getCurrentSession().createCriteria(Articulo.class)
                    .createAlias("idArticulo", "ar")
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.eq("ar.nombreComercial", detalle.getIdArticulo().getNombreComercial()))
                    .uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
        }

        return detalleBus;
    }

    @Override
    public Collection<DetallePedidoOp> listarDetallesPorOpSortModelo(Integer idOrdenPedido) throws DAOException {
        Collection<DetallePedidoOp> listaDetalles = new ArrayList<DetallePedidoOp>();
        try {
            sessionFactory.getCurrentSession().flush();
            listaDetalles = sessionFactory.getCurrentSession().createCriteria(DetallePedidoOp.class)
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.eq("idOrdenPedido.id", idOrdenPedido))
                    .addOrder(Order.asc("nombreProducto"))
                    .list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
        }

        return listaDetalles;
    }
}
